#include <ESP8266WiFi.h>      // 本程序使用 ESP8266WiFi库
#include <ESP8266WiFiMulti.h> //  ESP8266WiFiMulti库
#include <ESP8266WebServer.h> //  ESP8266WebServer库

#define buttonPin D3 // 按钮引脚D3

ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti对象,对象名称是'wifiMulti'

ESP8266WebServer esp8266_server(80); // 建立网络服务器对象，该对象用于响应HTTP请求。监听端口（80）

IPAddress local_IP(192, 168, 0, 123); // 设置ESP8266-NodeMCU联网后的IP
IPAddress gateway(192, 168, 0, 1);    // 设置网关IP（通常网关IP是WiFI路由IP）
IPAddress subnet(255, 255, 255, 0);   // 设置子网掩码
IPAddress dns(192, 168, 0, 1);        // 设置局域网DNS的IP（通常局域网DNS的IP是WiFI路由IP）

bool pinState; // 存储引脚状态用变量

void setup()
{
    Serial.begin(9600); // 启动串口通讯
    Serial.println("");

    pinMode(buttonPin, INPUT_PULLUP); // 将按键引脚设置为输入上拉模式

    // 设置开发板网络环境
    if (!WiFi.config(local_IP, gateway, subnet))
    {
        Serial.println("Failed to ESP8266 IP");
    }

    wifiMulti.addAP("301fang", "lyq1988w112233");

    // 尝试网络连接
    int i = 0;
    while (wifiMulti.run() != WL_CONNECTED)
    {
        delay(1000);
        Serial.print(i++);
        Serial.print(' ');
    }

    // WiFi连接成功后，通过串口监视器输出连接信息
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(WiFi.SSID());
    Serial.print("IP address:\t");
    Serial.println(WiFi.localIP());

    // 设置网络服务器
    esp8266_server.on("/update", handleUpdate); // 处理客户端HTTP请求LED状态

    esp8266_server.begin();
    Serial.println("HTTP esp8266_server started");
}

void loop()
{
    pinState = digitalRead(buttonPin); // 获取引脚状态
    esp8266_server.handleClient();     // 处理http服务器访问
}

// 处理客户端HTTP请求LED状态button: 1
void handleUpdate()
{
    String pinStateStr;
    pinState == HIGH ? pinStateStr = "1" : pinStateStr = "0";
    esp8266_server.send(200, "text/html", "buttonState: " + pinStateStr);
}